home *** CD-ROM | disk | FTP | other *** search
- /* XText 0.9 7/20/95 beta 1
- Paul A. Griffin
-
- pgriffin@tiac.net (home->NextMail/Mime/text welcome)
- */
- /* This file is part of the XText package (version 0.8)
- Mike Dixon, April 1992
-
- Copyright (c) 1992 Xerox Corporation. All rights reserved.
-
- Use and copying of this software and preparation of derivative works based
- upon this software are permitted. This software is made available AS IS,
- and Xerox Corporation makes no warranty about the software or its
- performance.
- */
-
- #import <objc/Object.h>
- #import <dpsclient/event.h>
-
- /* An XTAction specifies the action to be taken in response to a key event.
- When a key event occurs, the applyTo:event: method is invoked; this is
- the key method that must be implemented by the subclasses of XTAction.
-
- Actions normally return self from the applyTo:event: method, but by
- returning nil they can cause the event to be handled normally by XText0's
- superclass (i.e. Text).
-
- The class method undefinedAction returns a default action that invokes
- the text object's unboundKey method.
- */
-
- @interface XTAction:Object
- {
- }
- + undefinedAction;
- - applyTo:xtext event:(NXEvent *)event;
- @end
-
- #define MAPPED_KEYS 256 // table size for a dispatch action
- #define NUM_MASKS 7 // keyboard independent flags
- /*
- NX_ALPHASHIFTMASK Shift lock
- NX_SHIFTMASK Shift key
- NX_CONTROLMASK Control key
- NX_ALTERNATEMASK Alt key
- NX_COMMANDMASK Command key
- NX_NUMERICPADMASK Number pad key
- NX_HELPMASK Help key
-
- charCodes are 128 * event->data.key.charCode,
- + 1 if shift lock,
- + 2 if shift,
- + 4 if control,
- + 8 if alt
- + 16 if command
- + 32 if numeric keypad
- + 64 if help key
- */
-
- #define CHAR_CODES (MAPPED_KEYS * (1 << NUM_MASKS) )//combinations/key
-
- typedef int charCode;
- typedef XTAction *actionTbl[CHAR_CODES];
-
- /* XTMsg0Action, XTMsg1Action, and XTMsg2Action are subclasses of XTAction
- that send a specified message to the text object with 0, 1, or 2 args.
- */
-
- @interface XTMsg0Action:XTAction
- {
- SEL action_sel;
- }
- - initSel:(SEL)sel;
- @end
-
- @interface XTMsg1Action:XTAction
- {
- SEL action_sel;
- int action_arg;
- }
- - initSel:(SEL)sel arg:(int)arg;
- @end
-
- @interface XTMsg2Action:XTAction
- {
- SEL action_sel;
- int action_arg1;
- int action_arg2;
- }
- - initSel:(SEL)sel arg:(int)arg1 arg:(int)arg2;
- @end
-
- /* XTDispatchAction is a subclass of XTAction that maintains a dispatch
- table of other actions and selects one based on the key pressed. The
- methods are
- init initializes all actions to `nil'. XText
- has default NeXT Text Class behavior
-
- initBase:estream: the first argument is a string naming a 'base'
- set of initial bindings; the only values currently
- supported are "none".
-
- loadFromFile:fullName estream:errs
- loads keybindings from a file. Comments are
- lines in the file beginning with `#'. This
- method enables developers to load keybinding
- files from their .app wrapper directories.
-
- bindKey:toAction:estream:
- bind a key to a specified action; an action of nil
- will cause the key to be handled normally by the
- Text class
-
- addBindings:estream:
- parse and install the bindings specified by a
- string
-
- The estream argument is used to report any errors; if it is nil, the
- default error stream (which simply pops up an alert panel) is used.
- */
-
- @interface XTDispatchAction:XTAction
- {
- actionTbl actions;
- }
- - init;
- - initBase:(const char *)base estream:errs;
- - loadFromFile:(char *)fullName estream:errs;
- - bindKey:(charCode)key toAction:action estream:errs;
- @end
-
- @interface XTDispatchAction(parsing)
- - addBindings:(const char *)bindings estream:errs;
- @end
-
- /* XTEventMsgAction is a subclass of XTAction that sends a specified
- message to the text object, passing the event as an argument.
- This is useful for implementing some special-purpose prefix commands
- like 'quote next character'
- */
-
- @interface XTEventMsgAction:XTAction
- {
- SEL action_sel;
- }
- - initSel:(SEL)sel;
- @end
-
- /* XTSeqAction is a subclass of XTAction that invokes a sequence of
- subactions.
- */
-
- @interface XTSeqAction:XTAction
- {
- int length;
- XTAction **actions;
- }
- - initLength:(int)len actions:(XTAction **)acts;
- @end
-